package model.entities;

import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import model.dtos.MozoDTO;
import model.persistence.HibernateSessionFactory;
import model.persistence.daos.FacturaDAO;
import model.persistence.daos.LocalDAO;
import model.persistence.daos.SectorDAO;

import org.hibernate.Session;

@Entity
@Table(name="Mozos")
public class Mozo
{
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int id;
	// columnDefinition="Decimal(18,2)"
	@Column(name="porcentajeComision", nullable=true, columnDefinition="Decimal(18,2)")
	private double porcentajeComision;
	
	@OneToOne
	@JoinColumn(name="idLocal", nullable=true)
	private Local local;
	
	@Column(name="nombre", nullable=false)
	private String nombre;
	
	@OneToOne
	@JoinColumn(name="idSectorActual", nullable=true)
	private Sector sector;
	

	public float calcularComision()
	{
		float comision = 0;
		Collection<Factura> facturas = FacturaDAO.getFacturasDelDia(this);

		for (Factura factura : facturas)
		{
			comision += porcentajeComision * factura.getMonto();
		}

		return comision;
	}

	public boolean puedeAtender(Mesa mesa)
	{
		// TODO Auto-generated method stub
		return true;
	}

	public int getId()
	{
		return id;
	}

	public void setId(int id)
	{
		this.id = id;
	}

	public double getPorcentajeComision()
	{
		return porcentajeComision;
	}

	public void setPorcentajeComision(double porcentajeComision)
	{
		this.porcentajeComision = porcentajeComision;
	}

	public Local getLocal()
	{
		return local;
	}

	public void setLocal(Local local)
	{
		this.local = local;
	}

	public static void Save(Mozo mozo)
	{
		Session session = HibernateSessionFactory.getSessionFactory().openSession();
		session.save(mozo);
		session.flush();
		session.close();		
	}

	public String getNombre()
	{
		return nombre;
	}

	public void setNombre(String nombre)
	{
		this.nombre = nombre;
	}

	public MozoDTO crearDTO()
	{
		MozoDTO dto = new MozoDTO();
		dto.setId(this.id);
		dto.setNombre(this.nombre);
		
		return dto;
	}

	public static Mozo crearInstancia(MozoDTO _mozo)
	{
		Mozo mozo = new Mozo();
		mozo.setNombre(_mozo.getNombre());
		mozo.setLocal((Local) LocalDAO.getById(_mozo.getLocal()));
		mozo.setSector((Sector) SectorDAO.getById(_mozo.getSector()));
		mozo.setPorcentajeComision(_mozo.getPorcentajeComision());
		return mozo;
	}

	public void setSector(Sector sector) {
		this.sector = sector;
	}

	public Sector getSector() {
		return sector;
	}
}
